import storage from 'good-storage'
/*把搜索的结果保存下来*/  
/*用export把方法暴露出来*/  
/*定义存储搜索的key  _search_定义内部使用的key*/  
const SEARCH_KEY = '__search__'
const SEARCH_MAX_LEN = 15

//记录播放　历史数据 sood_song
const PLAY_KEY = '__play__'
const PLAY_MAX_LEN = 200

//用户喜欢数据
const FAVORITE_KEY = '__favorite__'
const FAVORITE_MAX_LEN = 200
/*插入方法 arr存储的数据  val传入存储的值  
compare前后比较的函数  maxlen存入的最大值*/
/*当数组中的元素在测试条件时返回 true 时, findIndex() 
返回符合条件的元素的索引位置，之后的值不会再调用执行函数*/
function insertArray(arr, val, compare, maxLen) {
  const index = arr.findIndex(compare)
  if (index === 0) {//数据为数组中的第一个数据 不做任何操作
    return
  }
  if (index > 0) {//数组中有这条数据并且不再第一个位置  
    arr.splice(index, 1)
  }
  arr.unshift(val)//把这条数据存储到数组中的第一个位置上 
  if (maxLen && arr.length > maxLen) {//如果有条数限制并且数组的个数大于限制数
	 //方法将删除 arrayObject 的最后一个元素，把数组长度减 1，并且返回它删除的元素的值  
    arr.pop()
  }
}
//删除的通用方法
function deleteFromArray(arr, compare) {
  const index = arr.findIndex(compare)
  if (index > -1) {
    arr.splice(index, 1)
  }
}
//开源storage的库，对localstorage和sessionstorage的封装
 // 写入数据
export function saveSearch(query) {
  let searches = storage.get(SEARCH_KEY, [])
/*逻辑是最后一次搜索的结果放到搜索历史的第一个*/
  insertArray(searches, query, (item) => {
    return item === query
		//这是传入的一个比较函数 说明query在这个数组中  
  }, SEARCH_MAX_LEN)
  storage.set(SEARCH_KEY, searches)
  return searches
}

//读入数据
export function deleteSearch(query) {
  let searches = storage.get(SEARCH_KEY, [])
  deleteFromArray(searches, (item) => {
    return item === query
  })
  storage.set(SEARCH_KEY, searches)
  return searches
}

//删除方法
export function clearSearch() {
  storage.remove(SEARCH_KEY)
  return []
}

export function loadSearch() {
  return storage.get(SEARCH_KEY, [])
}

export function savePlay(song) {
  let songs = storage.get(PLAY_KEY, [])
  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, PLAY_MAX_LEN)
  storage.set(PLAY_KEY, songs)
  return songs
}

export function loadPlay() {
  return storage.get(PLAY_KEY, [])
}

//用户喜欢数据 add
export function saveFavorite(song) {
  let songs = storage.get(FAVORITE_KEY, [])
  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, FAVORITE_MAX_LEN)
  storage.set(FAVORITE_KEY, songs)
  return songs
}

//用户喜欢数据 clear
export function deleteFavorite(song) {
  let songs = storage.get(FAVORITE_KEY, [])
  deleteFromArray(songs, (item) => {
    return item.id === song.id
  })
  storage.set(FAVORITE_KEY, songs)
  return songs
}

//初始状态 加载所有数据
export function loadFavorite() {
  return storage.get(FAVORITE_KEY, [])
}

